/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import java.sql.*;
import javax.swing.JOptionPane;

/**
 *
 * @author felipe
 */
public class Usuarios {

    Connection con;

    public Usuarios() {
        this.con = Conexion.getConexion();
    }
    
    public Object[] getUsuario(String username, String password) {
        //Comprobamos que el usuario y el password existen en la bd
        Object[] campos = null;
        try {
            PreparedStatement query = this.con.prepareStatement("SELECT rol FROM Usuarios WHERE username=? AND password=?");
            query.setString(1, username.trim());
            //Convierto la clave a md5
            query.setString(2, Funciones.md5(password.trim()));
            ResultSet res = query.executeQuery();

            //Clase para obtener más datos sobre la consulta
            ResultSetMetaData resmd = res.getMetaData();
            //Obtengo el total de columnas de la consulta
            int totalColumnas = resmd.getColumnCount();
            
            if (res.next()) {
                campos = new Object[totalColumnas];
                for (int i = 0; i < totalColumnas; i++) {
                    campos[i] = res.getString((i+1));
                }
            } else {
                campos = null;
            }

            query.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return campos;
    }

    public void deleteUsuario(int id) {
        try {
            PreparedStatement query = this.con.prepareStatement("DELETE FROM Usuarios WHERE id_usuario=?");
            query.setInt(1, id);
            query.executeUpdate();
            query.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public boolean addUsuario(String username, String password, String rol) {
       
        //compruebo que el usuario no existe
        if(this.existeUsername(username.trim())){
            Funciones.mensaje("El usuario ya existe, prueba con otro");
            return false;
        }
        try {
            PreparedStatement query = this.con.prepareStatement("INSERT INTO Usuarios (username,password,rol) values (?,?,?);");
            query.setString(1, username.trim());
            query.setString(2, Funciones.md5(password.trim()));
            query.setString(3, rol.toLowerCase());
            query.executeUpdate();
            query.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return true;
    }
    
    public boolean existeUsername(String username) {
        boolean existe=false;
        try {
            PreparedStatement query = this.con.prepareStatement("SELECT id_usuario FROM Usuarios WHERE username=?");
            query.setString(1, username.trim());
            query.executeQuery();
             ResultSet res = query.executeQuery();

            if (res.next()) {
                existe = true;
            } else {
                existe = false;
            }
            query.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return existe;
    }
    public Object[][] getUsuarios() {
        
        Object[][] filas = null;
        try {
            Statement query = this.con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            ResultSet res = query.executeQuery("SELECT id_usuario,username,rol  "
                    + "FROM Usuarios  ");
            //Clase para obtener más datos sobre la consulta
            ResultSetMetaData resmd = res.getMetaData();
            //Obtengo el total de columnas de la consulta
            int totalColumnas = resmd.getColumnCount();
            res.last();
            //obtengo el total de filas
            int totalFilas = res.getRow();
            res.beforeFirst();
            
            //Creo el objeto filas
            filas = new Object[totalFilas][totalColumnas];
            
            //Mientras hallan resultados poblo el objeto filas para luego devolverlo
            while (res.next()) {      
                for (int i = 0; i < totalColumnas; i++) {
                    filas[(res.getRow()-1)][i] = res.getString((i+1));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return filas;
    }
    
    public Object[] getUsuario(String username){
        Object[] filas = null;
        try {
            PreparedStatement query = this.con.prepareStatement("SELECT id_usuario FROM Usuarios WHERE username=?");
            query.setString(1, username);
            ResultSet res = query.executeQuery();
            //Clase para obtener más datos sobre la consulta
            ResultSetMetaData resmd = res.getMetaData();
            //Obtengo el total de columnas de la consulta
            int totalColumnas = resmd.getColumnCount();
            
            //Creo el objeto filas
            filas = new Object[totalColumnas];
            
            //Si existe el cliente
            if(res.next()){
                for (int i = 0; i < totalColumnas; i++) {
                    filas[i] = res.getString(i+1);
                }
            }else{
                return null;
            }
            
            query.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return filas;
    }
     public void updateUsuarios (int id_usuario, String username,String password,String rol){
       try {            
            PreparedStatement pstm = this.con.prepareStatement("update Usuarios " +
            "set username= ? ,"+ 
            "password = ? ,"+ 
            "rol= ? "+ 
            "where id_usuario = ? ");            
            
            pstm.setString(1, username);
            pstm.setString(2, Funciones.md5(password.trim()));
            pstm.setString(3,rol.toLowerCase());
            pstm.setInt(4,id_usuario);
            pstm.execute();
            pstm.close();            
         }catch(SQLException e){
         System.out.println(e);
      }
   }

}
